package com.example.pattern.singleton;

//静态内部类的方式，兼顾饿汉式单例模式的内存浪费问题和 synchronized 的性能问题
public class LazyInnerClassSingleton {

    //使用 LazyInnerClassSingleton 的时候，默认会先初始化内部类
    //★ 如果没有使用，则内部类是不加载的
    private LazyInnerClassSingleton() {
    }

    //每一个关键字都不是多余的，static 为了使单例空间共享，final 保证这个方法不会被重写，重载
    public static final LazyInnerClassSingleton getInstance() {
        //在返回结果以前，一定会先加载内部类
        return LazyHolder.LAZY;
    }

    //★ 默认不加载
    private static class LazyHolder {
        private static final LazyInnerClassSingleton LAZY = new LazyInnerClassSingleton();
    }

}
